// iterable
// const obj = {
//   [Symbol.iterator]: function () {
//     // iterator 迭代器接口 里面必须有一个next方法
//     return {
//       next: function () {
//         // 迭代结果接口 iterationResult 必须有一个value(当前迭代的数据)和一个done
//         return {
//           value: 'zs',
//           done: 'true'
//         }
//       }
//     }
//   }
// }

const obj = {
  store: ['foo', 'bar', 'car'],
  [Symbol.iterator]: function () {
    // 维护一个下标
    let index = 0
    const self = this
    // iterator 迭代器接口 里面必须有一个next方法
    return {
      next: function () {
        // 迭代结果接口 iterationResult 必须有一个value(当前迭代的数据)和一个done
        const result = {
          value: self.store[index],
          done: index >= self.store.length
        }
        index++
        return result
      }
    }
  }
}
// 第一调用就是true就直接停止执行了
for (const i of obj) {
  console.log('循环体', i)
}
// 循环体 foo
// 循环体 bar
// 循环体 car
